Ext.ns('CiteStar.QuotedPrice');

CiteStar.QuotedPrice.Controller = function (portletId) {
	this.portletId = portletId;
	return this;
}

CiteStar.QuotedPrice.Controller.prototype = {

	questRoomStore : undefined,
	
	conferenceOrMealStore : undefined,
	
	dataObj : undefined,
	
	editPanel : undefined,
	
	/**
	 * This message is a facade for messages.getMessage() to support localize message.
	 * 
	 * @param msg: the key for the specified content
	 * @param paramVal: the parameter value used for messages.getMessage() if necessary
	 */
	localize : function(msg, paramVal) {
		var jsController = this;
		if (!jsController.messages) {
			return msg;
		}
		if (!paramVal) {
			return jsController.messages.getMessage(msg);
		} else {
			return jsController.messages.getMessage(msg, paramVal);
		}
	},
	
	initializeEdit : function () {
		var jsController = this;
		jsController.loadStore();
		jsController.renderEditComponents();
	},
	
	/* load store from server via ajax call */
	loadStore : function() {
		var jsController = this;
		jQuery.ajax({
			url : jsController.resourceUrls['dataUrl'],
			cache : false,
			async : false,
			dataType : "json",
			success : function(json) {
				
				jsController.dataObj = json;
				
				var roomReader = new Ext.data.JsonReader({
					root : 'questRoomList',
					idProperty : 'questRoomId',
					totalProperty : 'totalCount',
					fields : [{
						name : "groupId"
					}, {
						name : "questRoomId"
					}, {
						name : "checkInDate"
					}, {
						name : "twinRoomNum"
					}, {
						name : "singleRoomNum"
					}, {
						name : "suiteOfRoomNum"
					}, {
						name : "price"
					}]
				});
				
				jsController.questRoomStore = new Ext.data.Store({
					autoLoad : true,
					reader : roomReader,
					proxy : new Ext.data.MemoryProxy(json),
					listeners : {
						exception : function(proxy, type, action, options, response) {
							jsController.displayErrorMessage(response.responseText);
						}
					}
				});
				
				var conferenceOrMealReader = new Ext.data.JsonReader({
					root : 'conferenceOrMealList',
					idProperty : 'conferenceOrMealId',
					totalProperty : 'totalCount',
					fields : [{
						name : "groupId"
					}, {
						name : "count"
					}, {
						name : "conferenceOrMealId"
					}, {
						name : "activityType"
					}, {
						name : "activityDate"
					}, {
						name : "startTime"
					}, {
						name : "endTime"
					}, {
						name : "decoratePattern"
					}, {
						name : "price"
					}]
				});
				
				jsController.conferenceOrMealStore = new Ext.data.Store({
					autoLoad : true,
					reader : conferenceOrMealReader,
					proxy : new Ext.data.MemoryProxy(json),
					listeners : {
						exception : function(proxy, type, action, options, response) {
							jsController.displayErrorMessage(response.responseText);
						}
					}
				});
			},
			error : function() {
				jsController.displayErrorMessage(jsController.resourceUrls['dataUrl'] + ' not found');
			}
		});	
	},
	
	renderEditComponents : function () {
		var jsController = this;
		Ext.QuickTips.init();
		
		jsController.basicPanel = new Ext.Panel({
			id : jsController.portletId + "basicPanel",
			collapsible : true,
			width : 600,
			height : 150,
			layout : "table",
			frame : true,
			layoutConfig : {
				tableAttrs : {
					cellspacing : "10px",
					width : "100%"
				},
				columns : 4
			},
			defaults : {
				xtype : "label"
			},
			title : jsController.localize("msg-basic-panel-title"),
			items : [
				{
					text : jsController.localize("msg-basic-panel-city"),
					cellCls : "title"
					
				},
				{
					text : jsController.dataObj.city,
					cellCls : "content"
				},
				{
					text : jsController.localize("msg-basic-panel-count"),
					cellCls : "title"
				},
				{
					text : jsController.dataObj.count + jsController.localize("msg-basic-panel-people"),
					cellCls : "content"
				},
				{
					text : jsController.localize("msg-basic-panel-arriveDate"),
					cellCls : "title"
				},
				{
					text : jsController.dataObj.arriveDate,
					cellCls : "content"
				},
				{
					text : jsController.localize("msg-basic-panel-leaveDate"),
					cellCls : "title"
				},
				{
					text : jsController.dataObj.leaveDate,
					cellCls : "content"
				},
				{
					text : jsController.localize("msg-basic-panel-groupName"),
					cellCls : "title"
				},
				{
					text : jsController.dataObj.groupName,
					colspan : 3,
					width : 400,
					cellCls : "content"
				},
				{
					text : jsController.localize("msg-basic-panel-requiredStarLevel"),
					cellCls : "title"
				},
				{
					text : jsController.dataObj.requiredStarLevel,
					colspan : 3,
					width : 400,
					cellCls : "content"
				}
			
			]
		});
		
		jsController.formPanel = new Ext.Panel({
			collapsible : true,
			width : 600,
			height : 150,
			layout : "table",
			frame : true,
			layoutConfig : {
				tableAttrs : {
					cellspacing : "10px",
					width : "100%"
				},
				columns : 3
			},
			defaults : {
				xtype : "label"
			},
			title : jsController.localize("msg-form-panel-title"),
			items : [{
					text : jsController.localize("msg-room-panel-column-twin-room") + ":",
					cellCls : "title"
				},
				{
					xtype : "textfield",
					width : 100,
					id : jsController.portletId + "_priceOftwinRoom",
					value : jsController.dataObj.priceOfTwinRoom,
					cellCls : "price"
				},{
					text : jsController.localize("msg-form-panel-money"),
					cellCls : "unit"
				},{
					text : jsController.localize("msg-room-panel-column-single-room") + ":",
					cellCls : "title"
				},
				{
					xtype : "textfield",
					width : 100,
					id : jsController.portletId + "_priceOfsingleRoom",
					value : jsController.dataObj.priceOfSingleRoom,
					cellCls : "price"
				},{
					text : jsController.localize("msg-form-panel-money"),
					cellCls : "unit"
				},{
					text : jsController.localize("msg-room-panel-column-suite-room") + ":",
					cellCls : "title"
				},
				{
					xtype : "textfield",
					width : 100,
					id : jsController.portletId + "_priceOfsuiteRoom",
					value : jsController.dataObj.priceOfSuiteRoom,
					cellCls : "price"
				},{
					text : jsController.localize("msg-form-panel-money"),
					cellCls : "unit"
				}]
		});
		
		jsController.roomPanel = new Ext.grid.EditorGridPanel({
			collapsible : true,
			width : 600,
			height : 200,
			title : jsController.localize("msg-room-panel-title"),
			store : jsController.questRoomStore,
			enableColumnMove : false,
			colModel : jsController.getRoomColumnModel(),
			enableHdMenu : false,
			clicksToEdit : 1,
			stripeRows : true,
			frame : true,
			columnLines : true,
			loadMask : {msg : jsController.localize("msg-room-panel-load-data")},
			bbar : ['->', {
				xtype : 'label',
				text : jsController.localize("msg-sum-price")
			}, '' ,{
				id : jsController.portletId + "_sumPriceOfRoom",
				xtype : 'textfield',
				width : 100,
				style : "text-align:right; margin-right : 30px;",
				value : jsController.dataObj.sumOfRoom
			}],
			listeners : {"afteredit" : function (e) {
				e.record.commit();
				var sum = 0;
				e.grid.store.each(function(record){
					sum += Math.round(parseFloat(record.get("price")) * 10000);
				});
				Ext.getCmp(jsController.portletId + "_sumPriceOfRoom").setValue(sum / 10000);
			}}
		});
		
		jsController.conferenceOrMealPanel = new Ext.grid.EditorGridPanel({
			id : jsController.portletId + "conferenceOrMeal",
			collapsible : true,
			width : 600,
			height : 200,
			title : jsController.localize("msg-conferenceOrMeal-panel-title"),
			store : jsController.conferenceOrMealStore,
			enableColumnMove : false,
			colModel : jsController.getConferenceOrMealColumnModel(),
			enableHdMenu : false,
			clicksToEdit : 1,
			stripeRows : true,
			frame : true,
			columnLines : true,
			loadMask : {msg : jsController.localize("msg-room-panel-load-data")},
			bbar : ['->', {
				xtype : 'label',
				text : jsController.localize("msg-sum-price")
			}, '' ,{
				id : jsController.portletId + "_sumPriceOfMeal",
				xtype : 'textfield',
				width : 100,
				style : "text-align:right; margin-right : 30px;",
				value : jsController.dataObj.sumOfMeal
			}],
			listeners : {"afteredit" : function (e) {
				e.record.commit();
				var sum = 0;
				e.grid.store.each(function(record){
					sum += Math.round(parseFloat(record.get("price")) * 10000);
				});
				Ext.getCmp(jsController.portletId + "_sumPriceOfMeal").setValue(sum / 10000);
			}}
		});
		
		jsController.memoPanel = new Ext.Panel({
			id : jsController.portletId + "memoPanel",
			collapsible : true,
			width : 600,
			height : 100,
			layout : "table",
			frame : true,
			layoutConfig : {
				tableAttrs : {
					cellspacing : "10px",
					width : "100%"
				},
				columns : 4
			},
			defaults : {
				xtype : "label"
			},
			title : jsController.localize("msg-memo-panel-title"),
			items : [{
				text : jsController.localize("msg-memo-panel-name"),
				cellCls : "title"
			}, {
				text : jsController.dataObj.memo
			}]
		});
		
		
		jsController.editPanel = new Ext.Panel({
			id : jsController.portletId + "_editPanel",
			renderTo : jsController.portletId + "Edit",
			width : 800,
			border : false,
			layout : "table",
			layoutConfig : {
				tableAttrs : {
					cellspacing : "10px",
					cellpadding : "10px"
				},
				columns : 1
			},
			items : [jsController.basicPanel, jsController.formPanel,
					jsController.roomPanel,
					jsController.conferenceOrMealPanel,
					jsController.memoPanel

			],
			buttons : [{
				text : jsController.localize("msg-button-save"),
				xtype : "button",
				id : jsController.portletId + "saveButton",
				width : 50,
				handler : function(obj, event) {
					Ext.MessageBox.show({
			           title: jsController.localize("msg-alert-title"),
			           buttons: Ext.MessageBox.OK,
			           animEl: jsController.portletId + "saveButton",
			           msg: jsController.localize("msg-button-save-success"),
			           icon: Ext.MessageBox.INFO
			       });
				}
			},{
				text : jsController.localize("msg-button-cancel"),
				xtype : "button",
				id : jsController.portletId + "cancelButton",
				width : 50,
				handler : function(obj, event) {
					
				}
			}],
			buttonAlign : 'center'
		});
	},
	
	getRoomColumnModel : function () {
		var jsController = this;
		var columns = [{
			header : "groupId",
			width : 0,
			sortable : false,
			dataIndex : 'groupId',
			hidden : true,
			resizable : false
		}, {
			header : "questRoomId",
			width : 0,
			sortable : false,
			dataIndex : 'questRoomId',
			hidden : true,
			resizable : false
		}, {
			header : jsController.localize("msg-room-panel-column-checkin-date"),
			width : 150,
			sortable : true,
			dataIndex : 'checkInDate',
			align : "center",
			hidden : false,
			resizable : false
		}, {
			header : jsController.localize("msg-room-panel-column-twin-room"),
			width : 100,
			sortable : false,
			dataIndex : 'twinRoomNum',
			align : "center",
			hidden : false,
			resizable : false,
			renderer : function (value, metaData, record, rowIndex, colIndex, store) {
				return value + jsController.localize("msg-room-panel-column-room")
			}
		}, {
			header : jsController.localize("msg-room-panel-column-single-room"),
			width : 100,
			sortable : false,
			dataIndex : 'singleRoomNum',
			align : "center",
			hidden : false,
			resizable : false,
			renderer : function (value, metaData, record, rowIndex, colIndex, store) {
				return value + jsController.localize("msg-room-panel-column-room")
			}
		}, {
			header : jsController.localize("msg-room-panel-column-suite-room"),
			width : 100,
			sortable : false,
			dataIndex : 'suiteOfRoomNum',
			align : "center",
			hidden : false,
			resizable : false,
			renderer : function (value, metaData, record, rowIndex, colIndex, store) {
				return value + jsController.localize("msg-room-panel-column-room")
			}
		}, {
			header : jsController.localize("msg-room-panel-column-price"),
			width : 100,
			sortable : false,
			dataIndex : 'price',
			hidden : false,
			resizable : false,
			align : "right",
			editor : new Ext.form.TextField({
				allowBlank : true,
				regex : /^\d*\.?\d*$/,
				regexText : jsController.localize("msg-room-panel-column-price-validation")
			})
		}];
		
		var columnModel = new Ext.grid.ColumnModel({
			defaults : {
				sortable : true
			},
			columns : columns
		});
		return columnModel;		
	},
	
	getConferenceOrMealColumnModel : function () {
		var jsController = this;
		var columns = [{
			header : "groupId",
			width : 0,
			sortable : false,
			dataIndex : 'groupId',
			hidden : true,
			resizable : false
		}, {
			header : "conferenceOrMealId",
			width : 0,
			sortable : false,
			dataIndex : 'conferenceOrMealId',
			hidden : true,
			resizable : false
		}, {
			header : jsController.localize("msg-meal-panel-column-activityDate"),
			width : 150,
			sortable : true,
			dataIndex : 'activityDate',
			align : "center",
			hidden : false,
			resizable : false,
			renderer : function (value, metaData, record, rowIndex, colIndex, store) {
				return value + " " + record.get("startTime") + jsController.localize("msg-meal-panel-column-to") + record.get("endTime")
			}
		}, {
			header : jsController.localize("msg-meal-panel-column-activityType"),
			width : 100,
			sortable : false,
			dataIndex : 'activityType',
			align : "center",
			hidden : false,
			resizable : false
		}, {
			header : jsController.localize("msg-meal-panel-column-count"),
			width : 100,
			sortable : false,
			dataIndex : 'count',
			align : "center",
			hidden : false,
			resizable : false,
			renderer : function (value, metaData, record, rowIndex, colIndex, store) {
				return value + jsController.localize("msg-basic-panel-people")
			}
		}, {
			header : jsController.localize("msg-meal-panel-column-decoratePattern"),
			width : 100,
			sortable : false,
			dataIndex : 'decoratePattern',
			align : "center",
			hidden : false,
			resizable : false
		}, {
			header : jsController.localize("msg-meal-panel-column-price"),
			width : 100,
			sortable : false,
			dataIndex : 'price',
			hidden : false,
			resizable : false,
			align : "right",
			editor : new Ext.form.TextField({
				allowBlank : true,
				regex : /^\d*\.?\d*$/,
				regexText : jsController.localize("msg-meal-panel-column-price-validation")
			})
		}];
		
		var columnModel = new Ext.grid.ColumnModel({
			defaults : {
				sortable : true
			},
			columns : columns
		});
		return columnModel;		
	}
}

